﻿using System;
using XSTDZ.ERP.Application.DataContracts;
using System.Collections.Generic;

namespace XSTDZ.ERP.Application
{
    /// <summary>
    /// 商品出库服务
    /// </summary>
    public interface IProductOutService
    {
        #region 出库订单
        //void AddProductOutBill(ProductOutBillDto ProductOutBillDto);
        //void UpdateProductOutBill(ProductOutBillDto ProductOutBillDto);

        void ConvertProductOutBillDeleteState(Guid outBillId);
        ProductOutBillDto GetProductOutBill(Guid outBillId);
        IEnumerable<ProductOutBillDto> GetProductOutBills(int pageIndex, int pageSize);
        void ConvertProductOutBillDeleteState(Guid outBillId, IEnumerable<Guid> outBillDetailIds);
        Guid AddOrUpdateProductOutBill(ProductOutBillDto outBillDto, IEnumerable<ProductOutBillDetailDto> outBillDetailDtos);
        Guid AddProductOutBill(ProductOutBillDto outBillDto, IEnumerable<ProductOutBillDetailDto> outBillDetailDtos);
        Guid UpdateProductOutBill(ProductOutBillDto outBillDto, IEnumerable<ProductOutBillDetailDto> outBillDetailDtos);
     
        /// <summary>
        /// 审核(并生成相应的收款单）
        /// </summary>
        /// <param name="outBillIds">符合条件的ID</param>
        /// <param name="auditId">审核人ID</param>
        void Audit(Dictionary<Guid, int> outBillIds, Guid auditId, Guid orgId);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="outBillId"></param>
        /// <returns>9:成功 0:没有成功 -1:已收款（不能反审）</returns>
        int UnAudit(Guid outBillId);
        /// <summary>
        /// 提交
        /// </summary>
        /// <param name="outBillIds"></param>
        void Confirm(IList<Guid> outBillIds, Guid orgId);
        #endregion
        #region 出库订单明细
        //void AddProductOutBillDetail(ProductOutBillDetailDto ProductOutBillDetailDto);
        //void UpdateProductOutBillDetail(ProductOutBillDetailDto ProductOutBillDetailDto);
        //void ConvertProductOutBillDetailDeleteState(Guid ProductOutBillDetailId);
        //ProductOutBillDetailDto GetProductOutBillDetail(Guid ProductOutBillDetailId);
        IEnumerable<ProductOutBillDetailDto> GetProductOutBillDetails(Guid outBillDetailId);
        /// <summary>
        /// 根据销售单ID获得相应的主数据和所有明细数据
        /// </summary>
        /// <param name="outBillId"></param>
        /// <returns></returns>
        Dictionary<ProductOutBillDto, IEnumerable<ProductOutBillDetailDto>> GetBillAndDetails(Guid outBillId);
         IEnumerable<ProductOutBillDetailDto> GetProductOutBillDetails(int pageIndex, int pageSize);
        #endregion
        #region 其它
         /// <summary>
         /// 获得当前出库单单号的最大单号
         /// </summary>
         /// <returns></returns>
         string GetMaxBillNo();
         #endregion
    }
}
